﻿using DAL;
using EntitiesLayer;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public class GestorProcesos
    {
        private Aplicacion myApp = new Aplicacion();

        public Aplicacion MyApp
        {
            get { return myApp; }
            set { myApp = value; }
        }
        private UnitOfWork UoW = new UnitOfWork();

        public Boolean IniciarSesion(String pusuario, String pclave) {

            Usuario objUsuario = UoW.RepositoryUsuario.IniciarSesion(pusuario, pclave);
            
            if (objUsuario == null) {
                return false;
            } 
            else {
                myApp.Usuario = objUsuario;
            }
            return true;
        }

        public Usuario IniciarSeccionDeUna(string pusuario, string pclave)
        {

           return UoW.RepositoryUsuario.IniciarSesion(pusuario, pclave);
        
        }

        public Aplicacion getMyApp()
        {
            return myApp;
        }


        public bool esPermitidoPorIdUsuario(int idUsuario, int pderecho){

            Usuario usuario =UnitOfWork.UsuarioManRepository.GetById(idUsuario);
            
            return usuario!=null && SesionUsuario.esPermitido(usuario.Id, pderecho);
        }

        public bool esPermitidoPorIdRol(int idRol, int pderecho) {

            return SesionUsuario.esPermitido(idRol, pderecho);
        }

        public Boolean esPermitido(int pderecho)
        {
            if (MyApp.Usuario == null)
            {
                return false;
            }
            else
            {
                return SesionUsuario.esPermitido(MyApp.Usuario.Rol.Id, pderecho);
            }
        }

        public Boolean esAutorizado(int pderecho) 
        {
            if (MyApp.Usuario == null)
            {
                return false;
            }
            else
            {
                return MyApp.Usuario.Rol.ListaPermisos.Count((x) => x.Id == pderecho)>0;
                //devuelve True si la opcion esta en la lista de permisos, 
                //a diferencia con esPermitido es que esta no consulta a la base de datos,
                //solo a la lista que fue cargada al inicio y esta en memoria.
            }
        }

        public String getNombreUsuario()
        {
            return MyApp.Usuario.NombreUsuario;
        }

        public Bitmap getFotoUsuario()
        {
            return MyApp.Usuario.Foto;
        }
        public void CerrarSesion()
        {
            MyApp.Usuario = null;
        }

        public Boolean CambiarContraseña(String pOldClave, String pNewClave)
        {
            if (MyApp.Usuario != null)
            {
                if (SesionUsuario.cambiarClave(MyApp.Usuario.NombreUsuario, pOldClave, pNewClave))
                {
                    return true;
                }
            }

            return false;
        }

    }

}
